XEdDSA and VXEdDSA
public key, private key から EdDSA 互換の署名を作る・検証する方法
XEdDSA は、DH で交換される public key, private key から EdDSA 互換の署名を作る & 検証するアルゴリズム
X25519 は Curve25519 の DH 関数
X448 は Curve448 のDH関数
使う楕円曲線が違う。その他の操作が違うのか不明... 448 のほうが bit 数が多くて安全らしい
NIST が定義していたパラメータが信用できないから開発されたらしい
VXEdDSA は XEdDSA を拡張して、verifiable random function にしたもの。
VXEdDSA の検証に成功した場合、message と public key にユニークであることが保証されたランダムな値が出力される。
この値は、VXEdDSA 署名を見ていない人にはランダムに見える(?)
XEdDSA
signing
input
Montgomery private key k: int mod q
Message to sign M: byte sequence
64bytes secure random data Z: byte sequence
output
R || s : 2b bits byte sequence
R: encode of a point
s: encode of an integer mod q
verification
input
Montgomery public key u: b bits byte sequence
Message to verify M: byte sequence
Signature to verify R || s (2b bits byte sequence)
output
boolean
VXEdDSA
signing
input: same to XEdDSA
output: pair of two values
V || h || s : 3b bits byte sequence
V: encode of a point
h, s: encode of integers mod q
v : VRF output (b bits byte sequence)
verification
input
u: public key
M: message
V || h || s
output
v if success, otherwise false
なぜ VHF にする必要があるのかまだよくわからない...